这个话题其实我很早之前就想写一写了,但是一直抽不开时间,今天终于有时间来聊一聊这个话题,希望能借助我过往研发产品的经验帮助更多从事嵌入式行业的朋友们入门。
一个新的产品立项了,接下来,就会有UI设计、结构、硬件、软件、产品经理、项目经理、测试工程师等角色来共同完成这个项目,当然这是最理想的状况。但现实的情况可能并没有这么理想,在小公司里,有可能你一个人就得把大部分的活干了,对于大部分的工程师来说经常摸不着头脑,想了很久却没思路,这的确是很让人难受的事情。笔者作为一名嵌入式软件工程师,在嵌入式行业也有将近5年的产品开发工作经验,从一个什么都不懂的小白摸爬滚打到现在,总算对产品的软件开发上有了自己的一点见解,当然我并不是大佬,世界那么大,我就只是一个小兵而已。在写这篇文章之前,我要感谢我曾服务过的防卫等公司给我带来的成长。 大学毕业以后出来参加工作,我做过很多产品,不单单是代码设计同时也负责了一部分的UI修改和设计(熟悉Photoshop的设计和应用),我的开源项目上就做了一些简单的UI设计;同时我也能从零把一个产品的软件从头到尾干出来,那我是怎么培养这种职业能力的?1、想象产品的最终是什么样子的?
如果想做一名富有竞争力的工程师,首先他对行业信息一定是非常敏感的,市面上对应产品有的功能,那我们的产品也得有啊,如果他们没有的功能我们有,这就叫产品的功能创新,一旦你做出增项的功能出来了,你甚至可以为公司的新产品去申请实用新型专利。 这个产品的外观是怎样的?是手持式的?是台式的?还是大型设备?它有哪些部分构成?具备什么样的功能?等等。 当我们能够不断的去思考,不断去拓宽自己的知识面的时候,那我们就真正进入了深度学习和思考的模式,我们不再是单纯的嵌入式软件开发工程师,而是嵌入式产品开发工程师。2、产品选型的方案
这个产品最终使用什么方案来做开发?是单片机类的方案?带RTOS还是裸机?是Linux类的方案?还是Android类的方案?(1)不计较成本,想快速做出产品,不想浪费在各种复杂的界面调试上缺点:万一要是串口屏玻璃没了,找不到替代品的话,这是个很麻烦的事情(2)计较成本,想GUI框架自己做,规划更加自由不受限单片机+普通LCD/OLED(带触摸/不带触摸)+GUI框架+裸机开发/RTOS开发优点:操作逻辑不受限,自由组合;后续即使是屏幕缺货,但UI软件的框架的思路是自己团队搞出来的,只要定好了一般不会大动。缺点:调试起来麻烦,坑比较多,需要有一定经验的工程师才能胜任。
(3)功能丰富,拓展性更强,追求高性能的方案Linux、Android,现在有大量的开源软件和组件,可以满足我们的各种定制需求,前提是研发团队的实力要强才能Hold得住。
优点:主流市场玩法雨露均沾,图像识别、音视频等等想玩多高大上都行。缺点:涉及驱动、SDK、各种工具链,需要有一定经验的工程师才能胜任。3、产品软件的构架与功能模块开发
这个产品的软件功能模块,它符合什么标准?国标的要求?行标的要求?企标的要求?为什么要有这三标?因为这三标就是给你做产品的时候,你需要仔细去看去读的东西,这些标准会告诉你,你的产品里至少需要具备的软件功能,没有这些东西,难怪你不知道怎么来做产品,如果都告诉你具备这些功能了,在只有大方向的前提下,难道你就不能先实现这些标准上要求的小模块的功能吗?比如你就为一个功能实现一个函数=>调节亮度、音量,最后在整体架构的时候,再以接口的形式集合进来进一步实现应用逻辑。那么有的人就会说了,最后到底要做成什么样子呢?三个字:多沟通!永远不要想着一版就成型,因为做产品的过程中不断重构不断迭代是很频繁也是很常见的事情。 拿之前我做的一个基于TencentOS-tiny的开源项目:危险气体探测仪
来说,这个项目在我开源前我就给它制定了相应的功能,包括项目的UI、软件框架、应用逻辑等等,最后花了一点时间实现了出来,详细文章可以看看我之前写的几个开源项目,因为它们足够简单,也足够入门了。
关于怎么从零开始做项目的这部分,如果还是没有思路,不知道某些功能怎么实现,我们可以去看看别人是怎么做的,然后借鉴并消化成自己的东西,当然如果你们觉得还是想要我分享多一点这方面的思路,可以在评论区告诉我,约定时间,我可以专门搞一场直播,因为直播语言表达肯定比写文字要理解得更快一些!我之前收集并整理开源的这个项目,截止今日在Gitee已经斩获了295个Star,214个fork,难道还没有参考价值吗?如果不知道怎么学习,怎么看,欢迎评论区告诉我,我来安排一场直播分享。
码云仓库:
https://gitee.com/morixinguan/mcu-product.git
获取项目方法:
git clone https://gitee.com/morixinguan/mcu-product.git
4、作为研发人员本身的职业态度
如果抱着自己永远只做一件事而不愿意去参与项目研发的其它细节,除非你真的做得很精能够成为行业专家,否则迟早要被职场淘汰。作为过来人的建议:
(4)善于总结成功或失败的经验,并总结形成可追溯的文档或笔记(5)积极主动去承担或者了解项目本职工作以外的其它事情 有时候,我们总是抱怨别人不给我们提供什么,而没有意识到这是一个能够让我们独立去思考,独立去发挥自己的想法的机会,这些机会是什么? 有人说,这跟冲突、领导力有什么关系?但凡在一个团队合作过程中,肯定大家有意见不同的时候,意见不同就会产生冲突,而冲突又分为好几种类型: 面对不同类型的冲突,我们可以选择什么都不做,也可以通过别的话题来回避冲突,还可以积极沟通,甚至是选择直接退出(你实在忍受不了的情况下)。但是最重要的一点:我们做任何一件事和一个决策的时候总要站在别人的角度思考问题,这或许是项目成功的关键因素之一,这就是情商的体现。 当你具备一定的能力和经验以后,你自然而然就会成为产品研发的主角,而不是一直在基层的岗位上日复一日的卷着直到35岁被职场淘汰。 好了,大概就分享这么多了,我觉得我还有很多东西没有分享完,你们想听什么?欢迎评论区留言。往期精彩
都说软件架构要分层、分模块,具体应该怎么做(二)
开源:智能宠物弹射喂食器连载贴之步进电机控制(二)
哈佛商学院MBA领导力提升: "What Makes a Leader?"学习笔记
手把手教你在STM32上实现OLED视频播放(很简单也很硬很肝!)
一些值得被定义为常用C语言头文件库的漂亮宏定义(值得收藏,以备使用参考)